#include "bsp.h"

#include "freertos.h"
#include "task.h"

#include "netconf.h"

//任务相关---------------------------------------------------------------------------
#define TASK1_PRIO 	10//任务优先级
#define TASK2_PRIO 	10
#define TASK1_STK_SIZE  64//任务堆栈大小
#define TASK2_STK_SIZE  64
TaskHandle_t osTask1_Handler;//任务句柄
TaskHandle_t osTask2_Handler;
TaskHandle_t osTask3_Handler;

void ostask1(void *pvParameters);//任务函数
void ostask2(void *pvParameters);

//RTOS入口---------------------------------------------------------------------------
void start_RTOS(void *pvParameters)
{
	//配置以太网
	switch(LwIP_Init())
	{
		case 1:printf("LwIP->内存错误!!!\r\n");break;
		case 2:printf("LwIP->以太网外设初始化失败!!!\r\n");break;
		case 3:printf("LwIP->网卡添加失败!!!\r\n");break;
		default:break;
	}
	//检查MCU与PHY芯片是否通信成功
	if(!ETH_ReadPHYRegister(LAN8720_PHY_ADDRESS,PHY_SR))
		printf("MCU与PHY芯片通信失败, 请检查电路或者源码!!!\r\n");
	//等待DHCP获取成功/超时溢出
	while((g_lwipdev.dhcpstatus!=2)&&(g_lwipdev.dhcpstatus!=0XFF)) delay_ms(1);
	
	taskENTER_CRITICAL();//进入临界区

	//创建->任务			
	xTaskCreate(ostask1,"task1",TASK1_STK_SIZE,NULL,TASK1_PRIO,&osTask1_Handler);
	xTaskCreate(ostask2,"task2",TASK2_STK_SIZE,NULL,TASK2_PRIO,&osTask2_Handler);
	
  taskEXIT_CRITICAL();//退出临界区
	vTaskDelete(NULL);//删除开始任务
}


int main(void)
{   
		
    bsp_init();

	
	xTaskCreate(start_RTOS,"start_RTOS",512,NULL,31,NULL);//创建起始任务
	vTaskStartScheduler(); //开启任务调度
    while(1);
}


/**
  * @brief	task1任务函数
  * @note	
  */
void ostask1(void *pvParameters)
{
	for(;;)
	{
		printf("任务1---\r\n");
		vTaskDelay(300);//延时
	}
}

/**
  * @brief	task2任务函数
  * @note	
  */
void ostask2(void *pvParameters)
{
	for(;;)
	{
		printf("任务2运行中\r\n");
		vTaskDelay(500);//延时 

	}
}

